let express = require('express');
// let bodyParser = require('body-parser');//获取参数的中间件
/*
* 使用body-parse 不能上传图片文件，我们使用multiparty
* 首先enctype="multipart/form-data" 将上传的文件以二进制的形式上传
* 1.npm i multiparty
* 2.const multiparty = require('multiparty');
* 3.上传图片
* let form = new multiparty.Form()
* form.uploadDir = '';
* form.parse(req,function(err,fields,files){
*   //获取提交的数据以及图片上传成功返回的图片信息
* })
* */
let multiparty = require('multiparty');//既可以获取数据又能上传图片
let md5 = require('md5-node');

let DB = require('./modules/db');
let fs = require("fs");

let app = new express();
let session = require("express-session");

//ejs 中设置全局数据，所有的页面都可以获取
//app.locals['useinfo'] = '12';

//配置session中间件
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge:1000*60*30
    }, //只有在https协议下才能访问cookie
    rolling:true
}));

// // parse application/x-www-form-urlencoded  设置body-parser中间件
// app.use(bodyParser.urlencoded({ extended: false }));
// // parse application/json
// app.use(bodyParser.json());

//使用ejs模板  浏览器默认找 view这个目录
app.set("view engine","ejs");
//配置一个public目录，为我们的静态资源目录
app.use(express.static("public"));
app.use('/loadImg',express.static("loadImg"));

//自定义中间件，确定登录的状态
// app.use((req,res,next)=>{
//     if(req.url == '/login' || req.url == '/doLogin'){
//         next();
//     }else{
//         if(req.session.userInfo && req.session.userInfo.username){
//             app.locals['userInfo'] = req.session.userInfo;//配置全局变量，可以在任何模板页面中使用
//             next();
//         }else{
//             res.redirect('/login');
//         }
//     }
// });
//
// app.get('/',(req,res)=>res.send('index'));
//
// app.get('/login',(req,res)=>{
//     res.render('login');
// });
// //使用post获取数据
// app.post('/doLogin',(req,res)=>{
//     let username = req.body.username;
//     let password = md5(req.body.password);
//
//    // 1.获取数据
//     //2.连接数据库查询数据
//     DB.find('user',{
//         username:username,
//         password:password
//     },function(err,data){
//         if(data.length>0){
//             console.log('登录成功');
//             //保存用户信息
//             req.session.userInfo=data[0];
//
//             res.redirect('/product');  /*登录成功跳转到商品列表*/
//
//         }else{
//             //console.log('登录失败');
//             res.send("<script>alert('登录失败');location.href='/login'</script>");
//         }
//     })
// })
app.get('/product',(req,res)=>{

    DB.find('product',{},(err,data)=>{
        res.render('product',{
            listGoods:data
        })
    })

});

app.get('/productAdd',(req,res)=>{

    res.render('productAdd');

});

//获取增加页面提交的图片和数据
app.post('/doProductAdd',(req,res)=>{

    let form = new multiparty.Form();
    form.uploadDir = 'loadImg';//图片的路径

    form.parse(req,function (err,fields,files) {
        let title = fields.title[0];
        let price = fields.price[0];
        let fee = fields.fee[0];
        let description = fields.description[0];

        console.log(files);//提交的图片文件
        let pic = files.pic[0].path;
        DB.insert('product',{
            title,
            pic,
            price,
            fee,
            description
        },function (err,data) {

            if(!err){
                console.log("添加数据成功");
                res.redirect('/product');
            }
        })
    })
})

app.post('/doProductEdit',(req,res)=>{
    let form = new multiparty.Form();
    form.uploadDir = 'loadImg';

    form.parse(req,(err,fields,files)=>{
        // console.log(fields);
        console.log(files);
        let id = fields._id[0];
        let title = fields.title[0];
        let price = fields.price[0];
        let fee = fields.fee[0];
        let description = fields.description[0];
        let pic = files.pic[0].path;
        let originalFileName = files.pic[0].originalFilename;
        let setData = {};
        if(originalFileName){
            setData = {
                title,
                pic,
                price,
                fee,
                description
            }
        }else{
            //没有上传图片
            setData = {
                title,
                price,
                fee,
                description
            }
            //删除生成的临时文件
            fs.unlink(pic);
        }
        DB.update('product',{"_id":new DB.ObjectID(id)},setData,function (error,data) {
            if(!error){
                res.redirect('/product');
                console.log("数据修改成功");
            }
        })
    })

})
app.get('/productEdit',(req,res)=> {

        let id = req.query.id;
        DB.find('product',{_id:new DB.ObjectID(id)},function (error,data) {
            console.log(data[0]);
            res.render('productEdit',{
                list:data[0]
            })
        })


    });

app.get('/productDelete',(req,res)=>{

    let id = req.query.id;
    console.log(id);
    DB.delete('product',{"_id":new DB.ObjectID(id)},function (err) {
        if(!err){
            res.redirect("/product");
        }
    });

});

app.get('/loginOut',(req,res)=>{

    //销毁session
    req.session.destroy(err=>{
        if(err)
            console.log(err);
        else{
            res.redirect('/login');
        }
    })
})

app.listen(3003,'127.0.0.1');